home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 September / PCWorld_2008-09_cd.bin / v cisle / sadanastroju / lightning-0.8-tb-win.xpi / chrome / calendar.jar / content / calendar / calendar-task-tree.js < prev    next >
Text File  |  2008-02-19  |  10KB  |  252 lines

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3.  *
  4.  * The contents of this file are subject to the Mozilla Public License Version
  5.  * 1.1 (the "License"); you may not use this file except in compliance with
  6.  * the License. You may obtain a copy of the License at
  7.  * http://www.mozilla.org/MPL/
  8.  *
  9.  * Software distributed under the License is distributed on an "AS IS" basis,
  10.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11.  * for the specific language governing rights and limitations under the
  12.  * License.
  13.  *
  14.  * The Original Code is OEone Calendar Code, released October 31st, 2001.
  15.  *
  16.  * The Initial Developer of the Original Code is
  17.  * OEone Corporation.
  18.  * Portions created by the Initial Developer are Copyright (C) 2001
  19.  * the Initial Developer. All Rights Reserved.
  20.  *
  21.  * Contributor(s): Garth Smedley <garths@oeone.com>
  22.  *                 Mike Potter <mikep@oeone.com>
  23.  *                 Chris Charabaruk <coldacid@meldstar.com>
  24.  *                 Colin Phillips <colinp@oeone.com>
  25.  *                 ArentJan Banck <ajbanck@planet.nl>
  26.  *                 Curtis Jewell <csjewell@mail.freeshell.org>
  27.  *                 Eric Belhaire <eric.belhaire@ief.u-psud.fr>
  28.  *                 Mark Swaffer <swaff@fudo.org>
  29.  *                 Michael Buettner <michael.buettner@sun.com>
  30.  *                 Philipp Kewisch <mozilla@kewis.ch>
  31.  *                 Berend Cornelius <berend.cornelius@sun.com>
  32.  *
  33.  * Alternatively, the contents of this file may be used under the terms of
  34.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  35.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  36.  * in which case the provisions of the GPL or the LGPL are applicable instead
  37.  * of those above. If you wish to allow use of your version of this file only
  38.  * under the terms of either the GPL or the LGPL, and not to allow others to
  39.  * use your version of this file under the terms of the MPL, indicate your
  40.  * decision by deleting the provisions above and replace them with the notice
  41.  * and other provisions required by the GPL or the LGPL. If you do not delete
  42.  * the provisions above, a recipient may use your version of this file under
  43.  * the terms of any one of the MPL, the GPL or the LGPL.
  44.  *
  45.  * ***** END LICENSE BLOCK ***** */
  46.  
  47. function addCalendarNames(aEvent) {
  48.     var calendarMenuPopup = aEvent.target;
  49.     var calendars = getCalendarManager().getCalendars({});
  50.     while (calendarMenuPopup.hasChildNodes()) {
  51.         calendarMenuPopup.removeChild(calendarMenuPopup.lastChild);
  52.     }
  53.     var taskTree = getFocusedTaskTree();
  54.     var tasks = taskTree.selectedTasks;
  55.     var tasksSelected = (tasks.length > 0);
  56.     if (tasksSelected) {
  57.         var selIndex = appendCalendarItems(tasks[0], calendarMenuPopup, null, "contextChangeTaskCalendar(event);");
  58.         if (isPropertyValueSame(tasks, "calendar") && (selIndex > -1)) {
  59.             calendarMenuPopup.childNodes[selIndex].setAttribute("checked", "true");
  60.         }
  61.     }
  62. }
  63.  
  64. function addCategoryNames(aEvent) {
  65.     var taskTree = getFocusedTaskTree();
  66.     var tasks = taskTree.selectedTasks;
  67.     var tasksSelected = (tasks.length > 0);
  68.     if (tasksSelected) {
  69.         var index = appendCategoryItems(tasks[0], aEvent.target, document.getElementById("calendar_task_category_command"));
  70.         aEvent.target.childNodes[index].setAttribute("checked","true");
  71.     } else {
  72.         appendCategoryItems(null, aEvent.target);
  73.         applyAttributeToMenuChildren(aEvent.target, "disabled", (!tasksSelected));
  74.     }
  75. }
  76.  
  77. function changeTaskProgressMenu(aEvent) {
  78.     changeMenuByPropertyName(aEvent, "percentComplete");
  79. }
  80.  
  81. function changeTaskPriorityMenu(aEvent) {
  82.     changeMenuByPropertyName(aEvent, "priority")
  83. }
  84.  
  85. /** This highly specialized function checks a command which naming follows
  86.  *  the notation 'calendar_' +  propertyname + ' + '-' + propertvalue + 'command',
  87.  *  when its propertyvalue part matches the propertyvalue of the selected tasks
  88.  *  as long as the selected tasks share common propertyValues.
  89.  *  @param aEvent the event that contains a target from which the child elements
  90.  *  are retrieved and unchecked.
  91.  *  @param aPropertyName the name of the property that is available at a task
  92.  */
  93. function changeMenuByPropertyName(aEvent, aPropertyName) {
  94.     uncheckChildNodes(aEvent);
  95.     var taskTree = getFocusedTaskTree();
  96.     var tasks = taskTree.selectedTasks;
  97.     var tasksSelected = ((tasks != null) && (tasks.length > 0));
  98.     if (tasksSelected) {
  99.         var task = tasks[0];
  100.         if (isPropertyValueSame(tasks, aPropertyName)) {
  101.             var command = document.getElementById("calendar_" + aPropertyName + "-" + task[aPropertyName] + "_command");
  102.             if (command) {
  103.                 command.setAttribute("checked", "true");
  104.             }
  105.         }
  106.     } else {
  107.         applyAttributeToMenuChildren(aEvent.target, "disabled", (!tasksSelected));
  108.     }
  109. }
  110.  
  111. function changeContextMenuForTask(aEvent) {
  112.     var taskTree = getFocusedTaskTree();
  113.     var tasks = taskTree.selectedTasks;
  114.     var task = null;
  115.     var tasksSelected = (tasks.length > 0);
  116.     applyAttributeToMenuChildren(aEvent.target, "disabled", (!tasksSelected));
  117.     document.getElementById("calendar_new_todo_command").removeAttribute("disabled");
  118.     if (tasksSelected) {
  119.         taskTree.contextTask = task = tasks[0];
  120.         if (isPropertyValueSame(tasks, "isCompleted")) {;
  121.             setBooleanAttribute(document.getElementById("calendar-context-markcompleted"), "checked", task.isCompleted);
  122.         } else {
  123.             document.getElementById("calendar-context-markcompleted").setAttribute("checked", false);
  124.         }
  125.     } else {
  126.         taskTree.contextTask = null;
  127.     }
  128. }
  129.  
  130. function contextChangeTaskProgress2(aProgress) {
  131.     contextChangeTaskProgress(aProgress);
  132.     document.getElementById("calendar_percentComplete-100_command2").checked = false;
  133. }
  134.  
  135. function contextChangeTaskProgress(aProgress) {
  136.     startBatchTransaction();
  137.     var taskTree = getFocusedTaskTree();
  138.     var tasks = taskTree.selectedTasks;
  139.     for (var t = 0; t < tasks.length; t++) {
  140.         var task = tasks[t];
  141.         var newTask = task.clone().QueryInterface( Components.interfaces.calITodo );
  142.         newTask.percentComplete = aProgress;
  143.         switch (aProgress) {
  144.             case 0:
  145.                 newTask.isCompleted = false;
  146.                 break;
  147.             case 100:
  148.                 newTask.isCompleted = true;
  149.                 break;
  150.             default:
  151.                 newTask.status = "IN-PROCESS";
  152.                 newTask.completedDate = null;
  153.                 break;
  154.         }
  155.         doTransaction('modify', newTask, newTask.calendar, task, null);
  156.     }
  157.     endBatchTransaction();
  158. }
  159.  
  160. function contextChangeTaskCategory(aEvent) {
  161.     startBatchTransaction();
  162.     var taskTree = getFocusedTaskTree();
  163.     var tasks = taskTree.selectedTasks;
  164.     var tasksSelected = (tasks.length > 0);
  165.     if (tasksSelected) {
  166.         var menuItem = aEvent.target;
  167.         for (var t = 0; t < tasks.length; t++) {
  168.             var newTask = tasks[t].clone().QueryInterface( Components.interfaces.calITodo );
  169.             setCategory(newTask, menuItem);
  170.             doTransaction('modify', newTask, newTask.calendar, tasks[t], null);
  171.         }
  172.     }
  173.     endBatchTransaction();
  174. }
  175.  
  176. function contextChangeTaskCalendar(aEvent) {
  177.    startBatchTransaction();
  178.    var taskTree = getFocusedTaskTree();
  179.    var tasks = taskTree.selectedTasks;
  180.    for (var t = 0; t < tasks.length; t++) {
  181.        var task = tasks[t];
  182.        var newTask = task.clone().QueryInterface( Components.interfaces.calITodo );
  183.        newTask.calendar = aEvent.target.calendar;
  184.        doTransaction('move', newTask, newTask.calendar, task, null);
  185.     }
  186.     endBatchTransaction();
  187. }
  188.  
  189. function contextChangeTaskPriority(aPriority) {
  190.     startBatchTransaction();
  191.     var taskTree = getFocusedTaskTree();
  192.     var tasks = taskTree.selectedTasks;
  193.     for (var t = 0; t < tasks.length; t++) {
  194.         var task = tasks[t];
  195.         var newTask = task.clone().QueryInterface( Components.interfaces.calITodo );
  196.         newTask.priority = aPriority;
  197.         doTransaction('modify', newTask, newTask.calendar, task, null);
  198.      }
  199.      endBatchTransaction();
  200.   }
  201.  
  202. function modifyTaskFromContext() {
  203.     var taskTree = getFocusedTaskTree();
  204.     var tasks = taskTree.selectedTasks;
  205.     for (var t = 0; t < tasks.length; t++) {
  206.         modifyEventWithDialog(tasks[t]);
  207.     }
  208.  }
  209.  
  210. /**
  211.  *  Delete the current selected item with focus from the task tree
  212.  */
  213. function deleteToDoCommand(aDoNotConfirm) {
  214.     var taskTree = getFocusedTaskTree();
  215.     var selectedItems = taskTree.selectedTasks;
  216.     calendarViewController.deleteOccurrences(selectedItems.length,
  217.                                              selectedItems,
  218.                                              false,
  219.                                              aDoNotConfirm);
  220. }
  221.  
  222. function getFocusedTaskTree() {
  223.     // Which tree is focused depends on the mode.
  224.     var taskTree;
  225.     if (isSunbird() || !gCurrentMode || gCurrentMode == "mail") {
  226.         taskTree = document.getElementById("unifinder-todo-tree");
  227.     } else if (!isSunbird() && gCurrentMode == "task") {
  228.         taskTree = document.getElementById("calendar-task-tree");
  229.     }
  230.     return taskTree;
  231. }
  232.  
  233. function tasksToMail() {
  234.     var taskTree = getFocusedTaskTree();
  235.     var tasks = taskTree.selectedTasks;
  236.     calendarMailButtonDNDObserver.onDropItems(tasks);
  237. }
  238.  
  239. function tasksToEvents() {
  240.     var taskTree = getFocusedTaskTree();
  241.     var tasks = taskTree.selectedTasks;
  242.     calendarCalendarButtonDNDObserver.onDropItems(tasks);
  243. }
  244.  
  245. function toggleCompleted(aEvent) {
  246.     if (aEvent.target.getAttribute("checked") == "true") {
  247.         contextChangeTaskProgress(100);
  248.     } else {
  249.         contextChangeTaskProgress(0);
  250.     }
  251. }
  252.